using ERP.RepositoryManage.Dtos;
using ERP.MasterData.Dtos;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace ERP.RepositoryManage
{
    /// <summary>
    /// 采购入库服务接口
    /// </summary>
    public interface IProcurementService : IApplicationService
    {
        /// <summary>
        /// 获取采购入库列表
        /// </summary>
        Task<PagedResultDto<ProcurementDto>> GetListAsync(GetProcurementInputDto input);

        /// <summary>
        /// 获取采购入库详情
        /// </summary>
        Task<ProcurementDto> GetAsync(int id);

        /// <summary>
        /// 创建采购入库
        /// </summary>
        Task<ProcurementDto> CreateAsync(CreateProcurementDto input);

        /// <summary>
        /// 更新采购入库
        /// </summary>
        Task<ProcurementDto> UpdateAsync(int id, UpdateProcurementDto input);

        /// <summary>
        /// 删除采购入库
        /// </summary>
        Task DeleteAsync(int id);

        /// <summary>
        /// 执行入库操作
        /// </summary>
        Task ExecuteInboundAsync(int id);

        /// <summary>
        /// 生成入库单编号
        /// </summary>
        Task<string> GenerateInboundCodeAsync();

        /// <summary>
        /// 获取采购入库明细列表
        /// </summary>
        Task<List<ProcurementDetailDto>> GetDetailsAsync(int procurementId);

        /// <summary>
        /// 添加采购入库明细
        /// </summary>
        Task<ProcurementDetailDto> AddDetailAsync(CreateProcurementDetailDto input);

        /// <summary>
        /// 删除采购入库明细
        /// </summary>
        Task DeleteDetailAsync(int detailId);

        /// <summary>
        /// 获取供应商选择列表
        /// </summary>
        Task<PagedResultDto<SupplierSelectDto>> GetSupplierSelectListAsync(GetSupplierSelectInputDto input);

        /// <summary>
        /// 获取物料选择列表
        /// </summary>
        Task<PagedResultDto<MaterialSelectDto>> GetMaterialSelectListAsync(GetMaterialSelectInputDto input);

        /// <summary>
        /// 获取物料类型树
        /// </summary>
        Task<List<MaterialTypeTreeDto>> GetMaterialTypeTreeAsync();

        /// <summary>
        /// 获取仓库选择列表
        /// </summary>
        Task<List<WarehouseSelectDto>> GetWarehouseSelectListAsync();
    }
} 